package main

import (
	"fmt"
	"sort"
	"strconv"
)

// ==================================1、实现对圆形、三角形、长方形求面积。=============================
type Areaer interface {
	area() float32
}

type Round struct {
	r float32
}
type Rectangle struct {
	l int
	w int
}
type Triangle struct {
	a int
	h int
}

func (t *Triangle) area() float32 {
	return float32(t.a) * float32(t.h) * 0.5
}

func (r *Round) area() float32 {
	num, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", r.r*3.14), 64)
	return float32(num)
}
func (r *Rectangle) area() float32 {
	return float32(r.w) * float32(r.l)
}

func area(a Areaer) float32 {
	return a.area()
}

type fa struct{}

func main() {
	//求面积
	y := area(&Round{10})
	c := area(&Rectangle{5, 6})
	s := area(&Triangle{10, 10})
	fmt.Println(y, c, s)
	//排序
	var e = make([]float32, 0, 3)
	e = append(e, y, c, s)
	sort.Slice(e, func(i, j int) bool {
		return e[i] < e[j]
	})
	fmt.Println(e)
}

//iota 会继承上一个公式

// 阿飞老师的批改
// 第一题很多问题没有考虑到，包括：
// 1. 几个结构体的元素类型都是int，但是在方法里却使用float32来进行强制类型转换。
//    而实际生活中，基本类型应该是float或double。
// 2. 圆形求面积时，没有考虑到r为负值等特殊情况；
// 其他题目也考虑自己来实现一下。
